import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;


public class TestArbol {

	TArbolBB unArbol;
	TElementoAB elem1;
	TElementoAB elem2;
	TElementoAB elem3;
	TElementoAB elem4;
	TElementoAB elem5;
	TElementoAB elem6;
	TElementoAB elem7;
	TElementoAB elem8;
	TElementoAB elem9;
	TElementoAB elem10;
	TElementoAB elem11;
	@Before
	public void setUp() {
		unArbol = new TArbolBB();
		elem1 = new TElementoAB(26, null);
		elem2 = new TElementoAB(15, null);
		elem3 = new TElementoAB(7, null);
		elem4 = new TElementoAB(10, null);
		elem5 = new TElementoAB(17, null);
		elem6 = new TElementoAB(16, null);
		elem7 = new TElementoAB(35, null);
		elem8 = new TElementoAB(29, null);
		elem9 = new TElementoAB(28, null);
		elem10 = new TElementoAB(34, null);
		elem11 = new TElementoAB(39, null);
		unArbol.insertar(elem1);
		unArbol.insertar(elem2);
		unArbol.insertar(elem3);
		unArbol.insertar(elem4);
		unArbol.insertar(elem5);
		unArbol.insertar(elem6);
		unArbol.insertar(elem7);
		unArbol.insertar(elem8);
		unArbol.insertar(elem9);
		unArbol.insertar(elem10);
		unArbol.insertar(elem11);
		
	}

	@Test
	public void testEsVacio() {
		unArbol = new TArbolBB();
		elem1 = new TElementoAB(26, null);
		assertTrue(unArbol.esVacio());
		unArbol.insertar(elem1);
		assertFalse(unArbol.esVacio());
	}

	@Test
	public void testInsertarIElementoAB() {
		unArbol = new TArbolBB();
		elem1 = new TElementoAB(26, null);
		assertFalse(unArbol.insertar(null));
		assertTrue(unArbol.insertar(elem1));
		assertFalse(unArbol.esVacio());
	}

	@Test
	public void testInOrden() {
		setUp();
		assertEquals(unArbol.inOrden(),"7-10-15-16-17-26-28-29-34-35-39");
	}

	@Test
	public void testPreOrden() {
		setUp();
		assertEquals(unArbol.preOrden(),"26-15-7-10-17-16-35-29-28-34-39");
	}

	@Test
	public void testPostOrden() {
		setUp();
		assertEquals(unArbol.postOrden(),"10-7-16-17-15-28-34-29-39-35-26");
	}

	@Test
	public void testBuscar() {
		assertNull(unArbol.buscar(null));
		setUp();
		assertEquals(unArbol.buscar(26),elem1);
		assertEquals(unArbol.buscar(15),elem2);
		assertEquals(unArbol.buscar(7),elem3);
		assertEquals(unArbol.buscar(10),elem4);
		assertEquals(unArbol.buscar(17),elem5);
		assertEquals(unArbol.buscar(16),elem6);
		assertEquals(unArbol.buscar(35),elem7);
		assertEquals(unArbol.buscar(29),elem8);
		assertEquals(unArbol.buscar(28),elem9);
		assertEquals(unArbol.buscar(34),elem10);
		assertEquals(unArbol.buscar(39),elem11);
		assertNull(unArbol.buscar(99));
	}

	@Test
	public void testObtenerAltura() {
		unArbol = new TArbolBB();
		assertEquals(unArbol.obtenerAltura(),-1);
		setUp();
		assertEquals(unArbol.obtenerAltura(),3);
	}

}
